package com.caregiver.watch.business.user.service;

import com.caregiver.watch.business.user.model.dto.AddContactDeviceParam;
import com.caregiver.watch.business.user.model.dto.EditContactDeviceParam;
import com.caregiver.watch.business.user.model.po.UserCareRecipient;
import com.caregiver.watch.business.user.model.po.UserDevice;
import com.caregiver.watch.business.user.model.vo.ContactDeviceDetailVo;
import com.caregiver.watch.business.user.model.vo.UserDeviceVo;

import java.util.List;

/**
 * @Description: 用户设备服务
 * @Author 疆戟
 * @Date 2025/8/16 13:45
 * @Version 1.0
 */
public interface UserDeviceService {

    /**
     * 批量插入用户设备
     * @param userId
     * @param deviceUuids
     */
    void batchInsertUserDevice(Long userId, List<String> deviceUuids);

    /**
     * 查询用户设备列表
     * @return
     */
    List<UserDeviceVo> queryUserDeviceList();

    /**
     * 添加亲友设备
     * @param param
     * @return
     */
    Boolean addContactDevice(AddContactDeviceParam param);

    /**
     * 删除亲友设备
     * @param deviceId
     * @return
     */
    Boolean deleteContactDevice(Long deviceId);


    /**
     * 查询设备列表
     * @param lastDeviceUuId
     * @param limit
     * @return
     */
    List<UserDevice> queryDeviceUuIds(String lastDeviceUuId, Integer limit);

    /**
     * 根据设备uuid查询用户id
     * @param deviceUuid
     * @return
     */
    Long queryUserIdByDeviceUuid(String deviceUuid);

    /**
     * 根据设备uuid查询设备id
     * @param deviceUuid
     * @return
     */
    Long queryDeviceIdByDeviceUuid(String deviceUuid);


    /**
     * 跟新设备信息
     */
    Boolean updateUserDevice(UserDevice userDevice);


    /**
     * 更新设备电量和信号强度
     * @param user
     * @param deviceUuid
     * @param batteryLevel
     * @param rssi
     * @return
     */
    Boolean updateBatteryAndRssi(Long user, String deviceUuid, Integer batteryLevel, Integer rssi);

    /**
     * 查询设备详情
     * @param deviceId
     * @return
     */
    ContactDeviceDetailVo queryContactDeviceDetail(Long deviceId);


    /**
     * 查询设备详情
     * @param userId
     * @param deviceUuid
     * @return
     */
    UserCareRecipient queryContactDeviceDetail(Long userId, String deviceUuid);

    /**
     * 查询全部监护人设备
     */
    List<UserDevice> queryAllContactDeviceList(Long userId);

    /**
     * 检查设备权限
     * @param userId
     * @param deviceUuid
     * @return
     */
    Boolean checkDevicePermission(Long userId, String deviceUuid);

    /**
     * 编辑亲友设备
     * @param param
     * @return
     */
    Boolean editContactDevice(EditContactDeviceParam param);
}
